package com.wei.chatroom.component;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

import java.util.concurrent.ConcurrentHashMap;

/**
 * @projectName: java_chatroom
 * @package: com.wei.chatroom.component
 * @className: OnlineUserManger
 * @author: weiJiang
 * @description: 记录用户在线状态（维护userId和webSocket的映射）
 * @date: 2025/9/30 下午6:27
 * @version: 1.0
 */
@Component
public class OnlineUserManger {
    //多线程线程安全的哈希表
    private ConcurrentHashMap<Integer, WebSocketSession> sessions=new ConcurrentHashMap<>();

    //用户上线,需要考虑，两个不同客户端登录同一个账号，需要避免多开
    public void online(Integer userId,WebSocketSession session){
        if(sessions.get(userId)!=null){
            //用户已经上线，拒绝登录
            System.out.println("多次登录");
            return;
        }
        sessions.put(userId,session);
        System.out.println(userId+"上线成功");
    }

    //用户下线
    public void offline(Integer userId,WebSocketSession session){
        WebSocketSession existSession=sessions.get(userId);

        //同样防多开
        //如果第二个设备登录同一账号，触发防多开
        //但下线逻辑还会进行，就不能让它(本来登录失败的客户端)下线
        if(existSession==session){
            //同一个再下线
            sessions.remove(userId);
            System.out.println(userId+"用户下线");
        }
    }

    //根据userId获取webSocket

    public WebSocketSession getSession(Integer userId){
        return sessions.get(userId);
    }

}
